package enumclass;

/**
 * @author: wuhao
 * @since: 2021/5/4 17:28
 * 使用enum定义枚举类
 */
public class EnumClass {

    /**
     * 注意点:
     * 使用 enum 定义的枚举类默认继承了 java.lang.Enum类，因此不能再继承其他类
     * 枚举类的构造器只能使用 private 权限修饰符
     * 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的
     * 实例系统会自动添加 public static final 修饰
     * 必须在枚举类的第一行声明枚举类对象
     * JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象
     * 作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举
     * 类作为限定。
     */
    public static void main(String[] args) {
        //values()方法：返回枚举类型的对象数组。该方法可以很方便地遍历所有枚举值。
        for (SeasonEnum value : SeasonEnum.values()) {
            System.out.println(value);
        }
        //valueOf(String str)：可以把一个字符串转为对应的枚举类对象。要求字符
        SeasonEnum spring = SeasonEnum.valueOf("SPRING");
        System.out.println(spring);

        //toString()：返回当前枚举类对象常量的名
        System.out.println(SeasonEnum.AUTUMN.toString());

       /* switch (SeasonEnum.SPRING.getSeasonName()){
            case "春天" :
                System.out.println("春风又绿江南岸");
                break;
            case "夏天":
                System.out.println("映日荷花别样红");
                break;
            case "秋天":
                System.out.println("秋水共长天一色");
                break;
            case "冬天":
                System.out.println("窗含西岭千秋雪");
                break;
        }*/
    }
}

enum SeasonEnum{
    //实例化对象,会自动添加 public static final 修饰
    SPRING("春天","春风又绿江南岸"),
    SUMMER("夏天","映日荷花别样红"),
    AUTUMN("秋天","秋水共长天一色"),
    WINTER("冬天","窗含西岭千秋雪");

    private final String seasonName;
    private final String seasonDesc;

    private SeasonEnum(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
}
